﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CAD_Project_1
{
    class Initiate
    {
        private string[] args;
        private string pName = string.Empty;
        private string fFile = string.Empty;
        private string uUrl = string.Empty;
        private string gName = string.Empty;
        private string modeDiff = string.Empty;
        private string xmlFile = string.Empty;
        private Boolean log = false;
        private Boolean test = false;
        private Log logFile;
        private string path;                        
        

        
 
        public Initiate(string[] args) {
            this.args = args;
            initPath();
        }

        /**
         * Funcao que permite organizar os campos introduzidos na linha de 
         * comando.
         */
        public void organiseParameters() {  
            
            for (int i = 0; i < args.Length; i++)
            {
                if (args[i].CompareTo("-t") == 0) {
                    test = true;
                }
                if(args[i].CompareTo("-p") == 0)
                {            
                    if(!args[i + 1].StartsWith("-"))
                        pName = args[i + 1];
                }
                else if (args[i].CompareTo("-f") == 0)
                {
                    if (!args[i + 1].StartsWith("-"))
                        fFile = args[i + 1];
                }
                else if (args[i].CompareTo("-u") == 0)
                {
                    if (!args[i + 1].StartsWith("-"))
                        uUrl = args[i + 1];
                }
                else if (args[i].CompareTo("-g") == 0)
                {                    
                    gName = "asdjfalsdfjalçsdjf";
                }
                else if (args[i].CompareTo("-d") == 0)
                {
                    if (!args[i + 1].StartsWith("-"))
                        modeDiff = args[i + 1];
                }
                else if (args[i].CompareTo("-l") == 0) 
                {
                    log = true;
                }
                else if (args[i].CompareTo("-x") == 0)
                {
                    xmlFile = args[i + 1];
                }
            }            
        }

        /**
         * Funcao que verifica se o modo log esta activo e ecreve no ficheiro
         * log.
         */
        public void writeLog(string log){
            if (this.PLog)
                this.logFile.writeLog(log);
        }

        /**
         * Funcao que verifica se o modo log esta activo e feche o ficheiro
         * log.
         */
        public void closeLog() {
            if (this.PLog)
                this.logFile.closeLog();
        }

        /**
         * Funcao que verifica se o modo log esta activo e cria um objecto log.
         */
        public void newLog(){
            if (this.PLog)
                this.logFile = new Log(path);
        }

        /**
         * Funcao que verifica se o modo log esta activo e cria um objecto log.
         */
        public void newLog(Boolean append)
        {
            if (this.PLog)
                this.logFile = new Log(path, append);
        }

        private void initPath()
        {
            path = ".\\stat_" + DateTime.Now + ".log";
            path = path.Replace("-", "_");
            path = path.Replace(":", "_");
            path = path.Replace(" ", "__");
        }

        public Boolean PLog {
            get { return log; }
            set { log = value; }        
        }

        public Boolean PTest
        {
            get { return test; }
            set { test = value; }
        }

        public string PName
        {
            get { return pName; }
            set { pName = value; }
        }

        public string GName
        {
            get { return gName; }
            set { gName = value; }
        }

        public string FFile
        {
            get { return fFile; }
            set { fFile = value; }
        }

        public string UUrl
        {
            get { return uUrl; }
            set { uUrl = value; }
        }

        public string ModeDiff {
            get { return modeDiff; }
            set { modeDiff = value; }
        }

        public string XmlFile
        {
            get { return xmlFile; }
            set { xmlFile = value; }
        }

        internal Log LogFile
        {
            get { return logFile; }
            set { logFile = value; }
        }

        public string Path
        {
            get { return path; }
            set { path = value; }
        }
    }
}
    